from django.contrib import admin

from .models import Select_Menu     # 导入菜单目录
from .models import UserInfo        # 导入用户信息
from .models import College_Class   # 导入学院班级信息
from .models import Course          # 导入阶段课程
from .models import Lilun_title,Lilun_unit_name     # 导入理论题目类和理论试卷名类
from .models import Jineng_title, Jineng_unit_title # 导入技能题目类和技能试卷名类
from .models import Interesting_Menu    # 导入好玩菜单栏类

import random   # 用于设置唯一code
import time
import string


admin.site.site_header = '八维学生系统'
admin.site.site_title = '亲爱的八维学子，请登陆'

# admin.site.register(Select_Menu)


@admin.register(Select_Menu)
class Select_MenuAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        """ 函数作用：使当前非超级用户，只能看到《张三的幸福生活》"""
        qs = super(Select_MenuAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(title='张三的幸福生活')

    search_fields = ('id', 'menu_name')     # 再哪些字段中查询
    list_display = ['id', 'menu_name', 'menu_html_id', 'menu_url']      # 查询界面显示相关记录信息
    list_display_links = ('id', 'menu_name', 'menu_html_id', 'menu_url')    # 将选择的字段可以进行点击进入当前记录
    list_filter = ('id', 'menu_name', 'menu_html_id', 'menu_url')   # 列表过滤器
    list_per_page = 20      # 每页显示多少记录
    ordering = ('id',)     # 记录显示排序，逆序为 -字段名
    # fields = ('id', 'menu_name', 'menu_html_id', 'menu_url')

    def get_readonly_fields(self, request, obj=None):
        """  设置普通用户的只读字段：重新定义此函数，限制普通用户所能修改的字段  """
        if request.user.is_superuser:   # 判断用户是否为超级用户
            self.readonly_fields = ['id']   # 超级用户的只读字段，一般设置为空
        return self.readonly_fields

    readonly_fields = ('id',)


@admin.register(College_Class)
class College_ClassAdmin(admin.ModelAdmin):
    list_display = ['id', 'name']  # 查询界面显示相关记录信息
    list_display_links = ('id', 'name')  # 将选择的字段可以进行点击进入当前记录
    list_filter = ('id', 'name')  # 列表过滤器
    list_per_page = 20  # 每页显示多少记录
    ordering = ('-name',)  # 记录显示排序，逆序为 -字段名


@admin.register(Course)
class CourseAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', 'detail', 'college_class']  # 查询界面显示相关记录信息
    list_display_links = ('id', 'name', 'detail', 'college_class')  # 将选择的字段可以进行点击进入当前记录
    list_filter = ('id', 'name', 'detail', 'college_class')  # 列表过滤器
    list_per_page = 20  # 每页显示多少记录
    ordering = ('-name',)  # 记录显示排序，逆序为 -字段名


@admin.register(UserInfo)
class UserInfoAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', 'password', 'classs', 'last_login']  # 查询界面显示相关记录信息
    list_display_links = ('id', 'password', 'name', 'classs', 'last_login')  # 将选择的字段可以进行点击进入当前记录
    list_filter = ('id', 'password', 'name', 'classs', 'last_login')  # 列表过滤器
    list_per_page = 20  # 每页显示多少记录
    ordering = ('-id',)  # 记录显示排序，逆序为 -字段名


# -------------------------理论题目------------------------------
# 理论题目
@admin.register(Lilun_title)
class Lilun_titleAdmin(admin.ModelAdmin):
    list_display = ['id', 'bianhao', 'kaoti', 'leixing', 'tigan', 'daan']  # 查询界面显示相关记录信息
    list_display_links = ('id','bianhao', 'kaoti', 'leixing', 'tigan', 'daan')  # 将选择的字段可以进行点击进入当前记录
    # list_filter = ('id','bianhao', 'kaoti', 'leixing', 'tigan', 'daan')  # 列表过滤器
    list_per_page = 20  # 每页显示多少记录
    ordering = ('-id',)  # 记录显示排序，逆序为 -字段名


# 理论试卷名称
@admin.register(Lilun_unit_name)
class Lilun_unit_nameAdmin(admin.ModelAdmin):
    list_display = ['id', 'name']  # 查询界面显示相关记录信息
    list_display_links = ('id', 'name')  # 将选择的字段可以进行点击进入当前记录
    list_filter = ('id', 'name')  # 列表过滤器
    list_per_page = 20  # 每页显示多少记录
    ordering = ('-id',)  # 记录显示排序，逆序为 -字段名


# 技能题目
@admin.register(Jineng_title)
class Jineng_titleAdmin(admin.ModelAdmin):
    list_display = ['id', 'theme', 'codedata', 'codedata_enlabel',  'detail', 'kaoti']  # 查询界面显示相关记录信息
    list_display_links = ('id', 'theme', 'codedata', 'codedata_enlabel',  'detail', 'kaoti')  # 将选择的字段可以进行点击进入当前记录
    # list_filter = ('id','bianhao', 'kaoti', 'leixing', 'tigan', 'daan')  # 列表过滤器
    list_per_page = 20  # 每页显示多少记录
    ordering = ('-id',)  # 记录显示排序，逆序为 -字段名

    def save_model(self, request, obj, form, change):
        # 自定义操作
        onlycode = ''.join(random.choices(string.ascii_letters, k=5)) + str(time.time())
        obj.codedata_enlabel = onlycode
        obj.save()


# 技能试卷名称
@admin.register(Jineng_unit_title)
class Jineng_unit_titleAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', 'course']  # 查询界面显示相关记录信息
    list_display_links = ('id', 'name', 'course')  # 将选择的字段可以进行点击进入当前记录
    list_filter = ('id', 'name', 'course')  # 列表过滤器
    list_per_page = 20  # 每页显示多少记录
    ordering = ('-id',)  # 记录显示排序，逆序为 -字段名


# -------------------------好玩项目--------------------------
@admin.register(Interesting_Menu)
class Interesting_MenuAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        """ 函数作用：使当前非超级用户，只能看到《张三的幸福生活》"""
        qs = super(Interesting_MenuAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(title='张三的幸福生活')

    search_fields = ('id', 'interesting_menu_name')     # 再哪些字段中查询
    list_display = ['id', 'interesting_menu_name', 'interesting_menu_html_id', 'interesting_menu_url']      # 查询界面显示相关记录信息
    list_display_links = ('id', 'interesting_menu_name', 'interesting_menu_html_id', 'interesting_menu_url')    # 将选择的字段可以进行点击进入当前记录
    list_filter = ('id', 'interesting_menu_name', 'interesting_menu_html_id', 'interesting_menu_url')   # 列表过滤器
    list_per_page = 20      # 每页显示多少记录
    ordering = ('id',)     # 记录显示排序，逆序为 -字段名
    # fields = ('id', 'menu_name', 'menu_html_id', 'menu_url')

    def get_readonly_fields(self, request, obj=None):
        """  设置普通用户的只读字段：重新定义此函数，限制普通用户所能修改的字段  """
        if request.user.is_superuser:   # 判断用户是否为超级用户
            self.readonly_fields = ['id']   # 超级用户的只读字段，一般设置为空
        return self.readonly_fields

    readonly_fields = ('id',)